package com.sikaryofficial.backend.service.useraction;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sikaryofficial.backend.constant.MyStatisticsTypeEnum;
import com.sikaryofficial.backend.constant.UserActionConstant;
import com.sikaryofficial.backend.domain.dto.req.UserActionReq;
import com.sikaryofficial.backend.domain.dto.resp.UserActionListResp;
import com.sikaryofficial.backend.domain.entity.UserAction;
import com.sikaryofficial.backend.service.IUserActionStrategy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author : qinjinyuan
 * @desc : 转发行为服务
 * @date : 2023/11/09 11:48
 */
@Service(value = UserActionConstant.ACTION_TYPE_FORWARD + IUserActionStrategy.SUFFIX)
@Slf4j
public class ForwardActionService extends AbstractUserActionStrategyService {

    /**
     * 更新用户行为数据
     *
     * @param req
     * @return
     */
    @Override
    public void updateUserAction(UserActionReq req) {
        this.saveUserAction(req);
    }

    /**
     * 用户行为数据后续处理
     * 1、增加业务ID数据及该数据对应的统计到缓存 （key= 产品ID value = 用户行为数据统计）
     *
     * @param objectId
     * @param options  操作 新增 false  取消true
     * @param userId
     * @return
     */
    @Override
    public void after(MyStatisticsTypeEnum typeEnum, Long objectId, boolean options, Long userId) {
        this.cleanCache(userId);
    }

    /**
     * 根据ActionType构建用户行为对象数据
     *
     * @param userActionPage
     * @param myStatisticsTypeEnum
     */
    @Override
    public IPage<? extends UserActionListResp> buildObjByActionType(IPage<UserAction> userActionPage, MyStatisticsTypeEnum myStatisticsTypeEnum) {
        Set<Long> objIds = userActionPage.getRecords().stream().map(UserAction::getObjectId).collect(Collectors.toSet());
        // 店铺转发
        if (MyStatisticsTypeEnum.FORWARD_STORE_NUM.equals(myStatisticsTypeEnum)) {
            return getActionWithStore(userActionPage, objIds);
        }
        // 产品转发
        if (MyStatisticsTypeEnum.FORWARD_PRODUCT_NUM.equals(myStatisticsTypeEnum)) {
            return getActionWithProduct(userActionPage, objIds);
        }
        return new Page<>(1, 7, 0);
    }

}
